package com.gkzf.ai.module.crm.service.creditReport;

import com.gkzf.ai.module.crm.controller.admin.creditReport.vo.admittancecondition.CreditReportAdmittanceConditionSaveReqVO;
import com.gkzf.ai.module.crm.controller.admin.creditReport.vo.admittancecondition.OverdueRecordVo;
import com.gkzf.ai.module.crm.controller.admin.creditReport.vo.creditreportdetails.CreditReportDetailsRespVO;
import com.gkzf.ai.module.crm.controller.admin.creditReport.vo.creditreportdetails.CreditReportDetailsSaveReqVO;
import jakarta.validation.Valid;

import java.util.List;
import java.util.Map;


/**
 * CRM 征信报告详情 Service 接口
 *
 * @author 国科智飞
 */
public interface CreditReportDetailsService {

    /**
     * 创建CRM 征信报告详情
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCreditReportDetails(@Valid CreditReportDetailsSaveReqVO createReqVO);

    /**
     * 更新CRM 征信报告详情
     *
     * @param updateReqVO 更新信息
     */
    void updateCreditReportDetails(@Valid CreditReportDetailsSaveReqVO updateReqVO);

    /**
     * 删除CRM 征信报告详情
     *
     * @param id 编号
     */
    void deleteCreditReportDetails(Long id);


    /**
     * 获取并更新信用分
     *
     * @param detailsDO 逾期分
     * @param conditionDO 基础分
     * @return 信用分
     */
    int statisticsCreditScore(CreditReportDetailsSaveReqVO detailsDO, CreditReportAdmittanceConditionSaveReqVO conditionDO);


    /**
     * 根据传入的CreditReportDetailsSaveReqVO对象，执行提取操作
     * @param updateReqVO
     */
    void extracted(CreditReportDetailsSaveReqVO updateReqVO);

    /**
     * 获得CRM 征信报告详情
     *
     * @param creditBasicId 编号
     * @return CRM 征信报告详情
     */
    CreditReportDetailsRespVO getCreditReportDetails(Long creditBasicId);

    /**
     * 解析 负债概要
     *
     * @param parenMap
     * @param parentName
     * @param detailsDO
     */
    void getBasicInfoDebt(Map<String, Object> parenMap, String parentName, CreditReportDetailsSaveReqVO detailsDO,Map<String,Integer> mechanismNumberMap);

    /**
     * 负债总额
     * @param detailsDO
     */
    void getTotalLiabilities(CreditReportDetailsSaveReqVO detailsDO);

    /**
     * 计算二次逾期合计
     * @param overdueSummary 计算逾期合计
     * @return
     */
    Map<String, List<OverdueRecordVo>> calculateOverdue(CreditReportDetailsSaveReqVO overdueSummary);
}